home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / pstui100.zip / PTUIWIN.PAS < prev    next >
Pascal/Delphi Source File  |  1993-02-20  |  22KB  |  848 lines

  1. {
  2.  
  3.                                                       ╔══════════════════╗
  4.                                                       ║   PTUI Windows   ║
  5.                                                       ║     Include      ║
  6.                                                       ║    Rev. 1.00     ║
  7.                                                       ╚══════════════════╝
  8.  
  9. }
  10.  
  11. Procedure TextWindow.SaveBackground;
  12. Begin
  13.   Size:=TextImageSize(X1,Y1,X2+2,Y2+1);       {Save the backgound text, shadow}
  14.   If Size>MaxAvail Then Error(1);
  15.   GetMem(Save,Size);
  16.   Mouse.Hide;
  17.   GetTextImage(X1,Y1,X2+ShadowXSize,Y2+ShadowYSize,Save);
  18.   Mouse.Show;
  19. End;
  20.  
  21. Procedure TextWindow.DrawWindow;
  22. Begin
  23.   VideoColor(BoxFrg,BoxBck);         {Redraw the window outline and interior}
  24.   Mouse.Hide;
  25.   DrawShadowWindow(X1,Y1,X2,Y2,ShdFrg,ShdBck,LineStyle,ShadowStyle);
  26.   Mouse.Show;
  27. End;
  28.  
  29. Procedure TextWindow.Open(NX1,NY1,NX2,NY2:Word;
  30.                           Forg,Back,ShadForg,ShadBack:Byte;
  31.                           LStyle:LineStyles;SStyle:ShadowStyles);
  32. Begin
  33.   Buttons.Init;
  34.   FillChar(VSlide,SizeOf(VSlide),0);
  35.   FillChar(HSlide,SizeOf(HSlide),0);
  36.   HdrButtonNum  :=0;
  37.   Header        :='';
  38.   Card          :=PTUIVCRT.Card;
  39.   Status        :=Visible;
  40.  
  41.   Case SStyle Of
  42.     NoShade   : Begin
  43.                   ShadowXSize:=0;
  44.                   ShadowYSize:=0;
  45.                 End;
  46.     Solid     : Begin
  47.                   ShadowXSize:=1;
  48.                   ShadowYSize:=1;
  49.                 End;
  50.     LightHash,
  51.     MediumHash,
  52.     DarkHash  : Begin
  53.                   ShadowXSize:=2;
  54.                   ShadowYSize:=1;
  55.                 End;
  56.   End;
  57.  
  58.   LineStyle  :=LStyle;
  59.   ShadowStyle:=SStyle;
  60.   BoxFrg     :=Forg;
  61.   BoxBck     :=Back;
  62.   ShdFrg     :=ShadForg;
  63.   ShdBck     :=ShadBack;
  64.   X1         :=NX1;
  65.   Y1         :=NY1;
  66.   X2         :=NX2;
  67.   Y2         :=NY2;
  68.  
  69.   SaveBackground;
  70.   DrawWindow;
  71. End;
  72.  
  73. Procedure TextWindow.DisplayHeading;
  74. Begin
  75.   Mouse.Hide;
  76.   If Header='' Then
  77.   Begin
  78.     VideoColor(BoxFrg,BoxBck);      {Blank the heading area}
  79.     GotoXY(X1+1,Y1+1);
  80.     Pad(X2-X1-1,#32);
  81.   End
  82.   Else
  83.   Begin
  84.     VideoColor(HdrFrg,HdrBck);
  85.     GotoXY(X1+1,Y1+1);
  86.     WriteStr(Header);
  87.   End;
  88.   Mouse.Show;
  89. End;
  90.  
  91. Procedure TextWindow.NewHeading(NewHead:String;NewMode:TextFormats;
  92.                                 Forg,Back:Byte);
  93. Begin
  94.   HdrFrg:=Forg;
  95.   HdrBck:=Back;              {Setup the new heading line}
  96.   HdrFmt:=NewMode;
  97.   If NewHead='' Then
  98.     Header:=''
  99.   Else
  100.     FormatVar(NewHead,Header,X2-X1-1,NewMode);
  101.   DisplayHeading;
  102. End;
  103.  
  104. Procedure TextWindow.Hide;
  105.  
  106. Var
  107.   NewSave :Pointer;
  108.  
  109. Begin
  110.   Status:=Hidden;
  111.   If Size>MaxAvail Then Error(1);
  112.   GetMem(NewSave,Size);
  113.   Mouse.Hide;
  114.   GetTextImage(X1,Y1,X2,Y2,NewSave);   {Save the window}
  115.   PutTextImage(X1,Y1,Save);            {Put old text back}
  116.   Mouse.Show;
  117.   FreeMem(Save,Size);
  118.   Save:=NewSave;
  119. End;
  120.  
  121. Procedure TextWindow.Show;
  122.  
  123. Var
  124.   NewSave :Pointer;
  125.  
  126. Begin
  127.   Status:=Visible;
  128.   If Size>MaxAvail Then Error(1);
  129.   GetMem(NewSave,Size);             {Save the text}
  130.   Mouse.Hide;
  131.   GetTextImage(X1,Y1,X2+ShadowXSize,Y2+ShadowYSize,NewSave);
  132.   PutTextImage(X1,Y1,Save);       {Display the window}
  133.   FreeMem(Save,Size);
  134.   TextBackground(BoxBck);
  135.   VideoColor(ShdFrg,ShdBck);            {Background Colours may have changed}
  136.   DrawShadow(X1,Y1,X2,Y2,ShadowStyle);  {Redraw the new shadow}
  137.   Mouse.Show;
  138.   Save:=NewSave;
  139. End;
  140.  
  141. Procedure TextWindow.NewPosition(NewX,NewY:Word);
  142.  
  143. Var
  144.   OldX,
  145.   OldY  :Word;
  146.  
  147. Begin
  148.   OldX:=X1;
  149.   OldY:=Y1;
  150.  
  151.   Hide;                    {Hide the window}
  152.   X2:=NewX+(X2-X1);
  153.   Y2:=NewY+(Y2-Y1);        {Change the position}
  154.   X1:=NewX;
  155.   Y1:=NewY;
  156.   Show;                    {Redisplay the same window}
  157.  
  158.   Buttons.MoveAll(Integer(X1)-Integer(OldX),Integer(Y1)-Integer(OldY));
  159.   If HSlide.MaxPos>0 Then
  160.   Begin
  161.     HSlide.X1:=HSlide.X1 + Integer(X1) - Integer(OldX);
  162.     HSlide.Y1:=HSlide.Y1 + Integer(Y1) - Integer(OldY);
  163.     HSlide.X2:=HSlide.X2 + Integer(X1) - Integer(OldX);
  164.     HSlide.Y2:=HSlide.Y2 + Integer(Y1) - Integer(OldY);
  165.   End;
  166.   If VSlide.MaxPos>0 Then
  167.   Begin
  168.     VSlide.X1:=VSlide.X1 + Integer(X1) - Integer(OldX);
  169.     VSlide.Y1:=VSlide.Y1 + Integer(Y1) - Integer(OldY);
  170.     VSlide.X2:=VSlide.X2 + Integer(X1) - Integer(OldX);
  171.     VSlide.Y2:=VSlide.Y2 + Integer(Y1) - Integer(OldY);
  172.   End;
  173. End;
  174.  
  175. Procedure TextWindow.Drag;
  176.  
  177. Var
  178.   MouseL,
  179.   MouseR,
  180.   MouseM,
  181.   MouseMoved,
  182.   MouseRelease :Boolean;
  183.   OldMouseX,
  184.   OldMouseY,
  185.   MouseX,
  186.   MouseY,
  187.   MouseStartX,
  188.   MouseStartY,
  189.   MouseDistX,
  190.   MouseDistY,
  191.   OldX,
  192.   OldY         :Word;
  193.   C            :Char;
  194.   OldBut       :Pointer;
  195.  
  196. Begin
  197.   OldBut:=Buttons.Buttons;
  198.   If Mouse.Active Then
  199.   Begin
  200.     C:=#1;
  201.     OldMouseX:=65535;
  202.     OldMouseY:=65535;
  203.     MouseStartX:=X1-1;
  204.     MouseStartY:=Y1-1;
  205.     Mouse.SetXY(MouseStartX * MouseGranularity,MouseStartY * MouseGranularity);
  206.   End;
  207.   MouseRelease:=False;
  208.   OldX:=X1;
  209.   OldY:=Y1;
  210.   Repeat
  211.     Repeat
  212.       MouseMoved:=False;
  213.       KeyBuffer(Clear);
  214.       If Mouse.Active Then
  215.       Begin
  216.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  217.         MouseX:=(MouseX Div MouseGranularity) + 1;
  218.         MouseY:=(MouseY Div MouseGranularity) + 1;
  219.         If (MouseX<>OldMouseX) Or (MouseY<>OldMouseY) Then MouseMoved:=True;
  220.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  221.       End;
  222.     Until KeyPressed Or ((MouseMoved Or MouseRelease) And Mouse.Active);
  223.     If MouseMoved Then
  224.     Begin
  225.       If (MouseX+(X2-X1)>VideoCard[Card].XSize-2) Then
  226.         OldMouseX:=VideoCard[Card].XSize-2-(X2-X1)
  227.       Else
  228.         OldMouseX:=MouseX;
  229.       If (MouseY+(Y2-Y1)>VideoCard[Card].YSize-1) Then
  230.         OldMouseY:=VideoCard[Card].YSize-1-(Y2-Y1)
  231.       Else
  232.         OldMouseY:=MouseY;
  233.       If (OldMouseX<>X1) Or (OldMouseY<>Y1) Then
  234.         NewPosition(OldMouseX,OldMouseY);
  235.     End
  236.     Else
  237.     Begin
  238.       If KeyPressed Then C:=ReadKey;
  239.       If C=#0 Then
  240.       Begin
  241.         C:=ReadKey;
  242.         Case C Of
  243.           'K':If X1>4                       Then NewPosition(X1-4,Y1);
  244.           'M':If X2<VideoCard[Card].XSize-6 Then NewPosition(X1+4,Y1);
  245.           'H':If Y1>4                       Then NewPosition(X1,Y1-4);
  246.           'P':If Y2<VideoCard[Card].YSize-5 Then NewPosition(X1,Y1+4);
  247.         End;
  248.       End
  249.       Else
  250.         Case C Of
  251.           '4':If X1>1                       Then NewPosition(X1-1,Y1);
  252.           '6':If X2<VideoCard[Card].XSize-2 Then NewPosition(X1+1,Y1);
  253.           '8':If Y1>1                       Then NewPosition(X1,Y1-1);
  254.           '2':If Y2<VideoCard[Card].YSize-1 Then NewPosition(X1,Y1+1);
  255.         End;
  256.     End;
  257.   Until (C in [#27,#13]) Or (MouseRelease And Mouse.Active);
  258.   If (C=#27) Then
  259.     NewPosition(OldX,OldY);
  260.   Buttons.Buttons:=OldBut;
  261. End;
  262.  
  263. Procedure TextWindow.DragVertSlideButton;
  264.  
  265. Var
  266.   Dummy,
  267.   SlideBarX1,
  268.   SlideBarY1,
  269.   SlideBarX2,
  270.   SlideBarY2,
  271.   OldMouseY,
  272.   MouseX,
  273.   MouseY       :Word;
  274.   MouseL,
  275.   MouseR,
  276.   MouseM,
  277.   MouseMoved,
  278.   MouseRelease :Boolean;
  279.   OldSlideBarMx:LongInt;
  280.   C            :Char;
  281.   NewSlide     :SlideBarInfo;
  282.  
  283. Begin
  284.   OldSlideBarMx:=VSlide.MaxPos;
  285.   C:=#1;
  286.   MouseRelease:=False;
  287.   VertSlideButtonPos(MouseX,MouseY,Dummy,Dummy);
  288.   MouseY:=65535;
  289.   Repeat
  290.     MouseMoved:=False;
  291.     OldMouseY:=MouseY;
  292.     KeyBuffer(Clear);
  293.     Repeat
  294.       If Mouse.Active Then
  295.       Begin
  296.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  297.         MouseY:=(MouseY Div MouseGranularity) + 1;
  298.         If (MouseY<>OldMouseY) Then MouseMoved:=True;
  299.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  300.       End;
  301.     Until KeyPressed Or MouseMoved Or MouseRelease;
  302.  
  303.     VertSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  304.     If KeyPressed Then
  305.     Begin
  306.       C:=ReadKey;
  307.       If C=#0 Then
  308.       Begin
  309.         C:=ReadKey;
  310.         Case C Of
  311.           'H':If MouseY>SlideBarY1   Then Dec(MouseY,1);
  312.           'I':If MouseY>SlideBarY1+9 Then Dec(MouseY,10);
  313.           'P':I